常用类介绍
视频锁定
{$ currentTime | date:'mm:ss' $}
{$ timeLeft | date:'mm:ss' $}
现在我们先介绍一下Java中Socket编程常用的类及其方法。
ServerSocket类的方法
在服务器端的应用通过java.net.ServerSocket获取端口号并进行监听。
ServerSocket类有4个构造函数:
编号 | 方法描述 |
---|---|
1 | public ServerSocket(int port) throws IOException 创建一个服务器端的Socket连接并绑定特定的端口,如果该端口已经被其他应用占用的话将抛出异常。 |
2 | public ServerSocket(int port, int backlog) throws IOException 与前一个构造函数类似,backlog参数指定了在等待队列中可以存储多少个客户端请求。 |
3 | public ServerSocket(int port, int backlog, InetAddress address) throws IOException 与前一个构造函数类似,InetAddress参数用于指定绑定的IP地址,如果服务器有多个IP地址时,该构造函数能够指定接收用户请求的IP地址。 |
4 | public ServerSocket() throws IOException 创建一个未绑定的服务器端Socket对象,使用此构造函数时需要通过bind()方法进行绑定(IP地址和端口号)。 |
如果ServerSocket的构造函数并未抛出异常,这就意味着你的程序已经成功的绑定了特定的端口并且做好了接收用户请求的准备。
以下是ServerSocket类的常用方法:
编号 | 方法描述 |
---|---|
1 | public int getLocalPort() 返回服务器端Socket监听的端口号。如果在上面的构造函数中我们将端口号设置为0,那么服务器将会为你指定一个未使用的端口号,此时我们就可以通过这个方法获取指定的端口号了。 |
2 | public Socket accept() throws IOException 等待客户端请求,在用户连接至指定的端口前或服务器端Socket超时前(假设我们通过setSoTimeout()方法设置了服务器端Socket的超时时间),该方法一直处于阻塞状态。 |
3 | public void setSoTimeout(int timeout) 服务器端Socket处于accept状态时等待客户端的超时时间。 |
4 | public void bind(SocketAddress host, int backlog) 将Socket绑定至特定的服务器地址和端口,如果你调用了无参的构造函数时需要使用此方法。 |
ServerSocket在执行了accept()
方法之后,当前的线程会一直处于阻塞状态,只有在接收到用户的请求后该线程才会继续执行,此时ServerSocket会创建一个新的Socket对象(使用一个随机的端口)并返回这个对象的引用,这样一个介于客户端和服务器之间的连接就建立好了,此时我们就可以使用这个连接进行通讯了。
Socket类的方法
客户端和服务器均采用java.net.Socket类实现彼此间的通讯,客户端通过初始化的方式获取Socket对象,而服务器则通过调用accept()方法返回一个Socket对象。
客户端可以采用以下5个构造函数实现与服务器的连接:
编号 | 方法描述 |
---|---|
1 | public Socket(String host, int port) throws UnknownHostException, IOException. 该构造函数尝试连接至指定的服务器及特定的端口。如果该构造函数未抛出异常,则表明连接建立成功,此时客户端已经连接至服务器。 |
2 | public Socket(InetAddress host, int port) throws IOException 该构造函数与前一个类似,但此处的host是一个InetAddress对象。 |
3 | public Socket(String host, int port, InetAddress localAddress, int localPort) throws IOException. 连接至指定的服务器及特定的端口号,此处客户端将使用指定的地址及端口号。 |
4 | public Socket(InetAddress host, int port, InetAddress localAddress, int localPort) throws IOException. 该构造函数与前一个类似,但此处的host是一个InetAddress对象。 |
5 | public Socket() 创建一个未绑定的Socket对象,使用connect()方法连接至服务器端。 |
当Socket的构造函数执行后,它不仅仅返回一个Socket对象的引用,同时它还建立了与服务器(特定端口)的连接。
下表中列出了Socket类的常用方法,需要注意的是客户端和服务器都使用了Socket对象,因此我们在客户端或服务器端都可以使用这些方法。
SN | Methods with Description |
---|---|
1 | public void connect(SocketAddress host, int timeout) throws IOException 该方法将连接至指定的服务器。当使用无参的构造函数时需要调用此方法。 |
2 | public InetAddress getInetAddress() 该方法返回当前Socket连接的本地计算机地址。 |
3 | public int getPort() 该方法返回当前Socket连接的远程计算机端口号。 |
4 | public int getLocalPort() 该方法返回当前Socket连接的本地计算机端口号。 |
5 | public SocketAddress getRemoteSocketAddress() 该方法返回当前Socket连接的远程计算机地址。 |
6 | public InputStream getInputStream() throws IOException 该方法返回当前Socket的输入流,该输入流连接远程Socket的输出流。 |
7 | public OutputStream getOutputStream() throws IOException 该方法返回当前Socket的输出流,该输出流连接远程Socket的输入流。 |
8 | public void close() throws IOException 关闭Socket,一旦Socket对象关闭后我们将不能使用此对象连接至任何服务器。 |
InetAddress类的方法
InetAddress类用来表示一个IP地址,当我们实现网络编程时这些方法将会非常实用:
SN | Methods with Description |
---|---|
1 | static InetAddress getByAddress(byte[] addr) 通过给定的原始IP地址返回一个InetAddress对象。 |
2 | static InetAddress getByAddress(String host, byte[] addr) 通过给定的主机名称和原始IP地址创建一个InetAddress对象。 |
3 | static InetAddress getByName(String host) 通过主机名称返回一个InetAddress对象。 |
4 | String getHostAddress() 返回IP地址的字符串。 |
5 | String getHostName() 返回主机名称。 |
6 | static InetAddress InetAddress getLocalHost() 返回本地主机的InetAddress对象。 |
7 | String toString()将IP地址转化为字符串。 |
在线练习
{$ activeFileHint $}